Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Как заставить работать JsHttpRequest на бесплатном хостинге (Юрий Насретдинов, оценка: 4)
Author Message
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Mon Apr 02, 2007 9:51 pm (написано за 7 минут 7 секунд)
   Post subject: Как заставить работать JsHttpRequest на бесплатном хостинге
Reply with quote

На бесплатных хостингах очень любят втыкать баннеры куда ни попадя, и это выливается в то, что JsHttpRequest просто так не работает. Для hut[точка]ru я нашёл очень простое решение (возможно, оно через некоторое время не будет работать, к сожалению :( ), которое-таки заставляет backend для JsHttpRequest работать:

Нужно всего-лишь в файле JsHttpRequest.php в методе _obHandler заменить строчку
Code (php): скопировать код в буфер обмена
return $text;
на
Code (php): скопировать код в буфер обмена
return $text.' /* <body> */';
И всё 3 загрузчика (xml, form, script) начинают работать (тестировалось для JsHttpRequest 5 под IE7, Firefox 2.0.0.3, Opera9). В результате метод _obHandler будет выглядеть вот так (для JsHttpRequest 5):
Code (php): скопировать код в буфер обмена
/**
     * Called in case of error too!
     */

    function _obHandler($text)
    {
        // Check for error.
        if (preg_match (www.php.net/preg_match)('{'.$this->_uniqHash.'(.*?)'.$this->_uniqHash.'}sx', $text)) {
            $text = str_replace (www.php.net/str_replace)($this->_uniqHash, '', $text);
        }
       
        // Make a resulting hash.
        if (!isset (www.php.net/isset)($this->RESULT)) {
            $this->RESULT = isset (www.php.net/isset)($GLOBALS['_RESULT'])? $GLOBALS['_RESULT'] : null;
        }
        $encoding = $this->SCRIPT_ENCODING;
        $result = array (www.php.net/array)(
            'id'   => $this->ID,
            'js'   => $this->RESULT,
            'text' => $text,
        );
        if (function_exists (www.php.net/function_exists)('array_walk_recursive') && function_exists (www.php.net/function_exists)('json_encode') && $this->_unicodeConvMethod) {
            $encoding = "UTF-8";
            $this->_nonAsciiChars = join (www.php.net/join)("", array_map (www.php.net/array_map)('chr', range (www.php.net/range)(128, 255)));
            $this->_toUtfFailed = false;
            array_walk_recursive($result, array (www.php.net/array)(&$this, '_toUtf8_callback'), $this->SCRIPT_ENCODING);
            if (!$this->_toUtfFailed) {
                // If some key contains non-ASCII character, convert everything manually.
                $text = json_encode($result);
            } else {
                $text = $this->php2js($result);
            }
        } else {
            $text = $this->php2js($result);
        }

        // Content-type header.
        // In XMLHttpRequest mode we must return text/plain - damned stupid Opera 8.0. :(
        $ctype = !empty (www.php.net/empty)($this->_contentTypes[$this->LOADER])? $this->_contentTypes[$this->LOADER] : $this->_contentTypes[''];
        header (www.php.net/header)("Content-type: $ctype; charset=$encoding");
       
        if ($this->LOADER != "xml") {
            // In non-XML mode we cannot use plain JSON. So - wrap with JS function call.
            // If top.JsHttpRequestGlobal is not defined, loading is aborted and
            // iframe is removed, so - do not call dataReady().
            $text = ""
                . ($this->LOADER == "form"? 'top && top.JsHttpRequestGlobal && top.JsHttpRequestGlobal' : 'JsHttpRequest')
                . ".dataReady(" . $text . ")\n"
                . "";
            if ($this->LOADER == "form") {
                $text = '<script type="text/javascript" language="JavaScript"><!--' . "\n$text" . '//--></script>';
            }
        }

        return $text.'/* <body> */';
    }
Для других бесплатных хостингов, возможно, это решение работать не будет. Но я надеюсь, что идея Вам понятна.

Если ничего не помогает, можете попробовать всегда явно использовать загручик form (см. полную документацию - dklab.ru/lib/JsHttpRequest/manual.html , чтобы узнать, как это делается), он использует IFRAME и не должен быть чувствительным к тому, что вставляются баннеры в тело страницы.

P.S. Посмотреть пример работы JsHttpRequest на указанном мной бесплатном хостинге можно по адресу: хттп://dolphinfm[точка]hut2[точка]ru/ - это демо-версия моего файлового менеджера.

Last edited by Юрий Насретдинов on Sun Jun 03, 2007 10:48 pm; edited 1 time in total
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Wed May 30, 2007 1:30 am (спустя 1 месяц 27 дней 3 часа 39 минут; написано за 1 минуту 47 секунд)
   Post subject:
Reply with quote

Может быть, стоит вставлять /* <body> */ в JavaScript-код? Т.е.
Code (php): скопировать код в буфер обмена
return $text . ($this->LOADER != "form"? "/* <body> */" : "");
А то он и в IFRAME добавляется в конец; мне кажется, это неправильно.
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Wed May 30, 2007 1:35 am (спустя 4 минуты; написано за 2 минуты 9 секунд)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
А то он и в IFRAME добавляется в конец; мне кажется, это неправильно.
Почему? Дело в том, что все баннеры вставляются после последнего <body>, и соответственно будет сначала вызыван обработчик для JsHttpRequest, а потом уже будут пытаться показаться баннеры. Но т.к. IFRAME тутже удаляется, баннеров может не появиться вообще. А если не вставлять <body> в конец, то скорее всего баннеры будут вставлены в начале (не проверял). То есть, ИМХО, это совсем не лишнее.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Wed May 30, 2007 10:21 am (спустя 8 часов 46 минут; написано за 39 секунд)
   Post subject:
Reply with quote

Может быть, в случае загрузчика FORM тогда вставлять <body> без /* ... */?
Или это вообще все равно?
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Wed May 30, 2007 12:43 pm (спустя 2 часа 21 минуту; написано за 5 секунд)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
Или это вообще все равно?
Это всё равно :).
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 388
   поощрить/наказать


PostPosted: Sun Jun 10, 2007 2:34 am (спустя 10 дней 13 часов 51 минуту; написано за 11 секунд)
   Post subject:
Reply with quote

есть радикальное средство: darkodemon.blogspot.com/2007/05/blog-post_15.html :)
Back to top
markers
Заглянувший



Joined: 13 Feb 2008
Posts: 5
Карма: 0
   поощрить/наказать


PostPosted: Thu Apr 03, 2008 5:59 pm (спустя 9 месяцев 23 дня 15 часов 25 минут; написано за 1 минуту 35 секунд)
   Post subject:
Reply with quote

дополнительный тэг <body> работает на всех бесплатных хостинг-площадках Агавы, но не стоит этим злоупотреблять. Я как-то давным-давно убрал их банер вниз, и мне они прегрозили удалением эккаунта.
Back to top
View user's profile Send private message
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Thu Apr 03, 2008 6:40 pm (спустя 41 минуту; написано за 44 секунды)
   Post subject:
Reply with quote

markers
Здесь это используется для того, чтобы просто заствить скрипт работать, а не для перемещения баннеров вниз.
Back to top
View user's profile Send private message Send e-mail
Тошнотик
Заглянувший



Joined: 19 Feb 2009
Posts: 1
Карма: 1
   поощрить/наказать


PostPosted: Thu Feb 19, 2009 7:31 pm (спустя 10 месяцев 16 дней 50 минут; написано за 3 минуты)
   Post subject:
Reply with quote

На хостинге awardspace.com баннеров нет, но библиотека там не работала. Долго ковырялся, пока не нашел, что там запрещена PHP функция getmypid().
Как только я ее закоментировал, все получилось.
Back to top
View user's profile Send private message
Sergey_ua
Guest





Карма: 388
   поощрить/наказать


PostPosted: Wed Sep 02, 2009 5:53 pm (спустя 6 месяцев 10 дней 22 часа 21 минуту; написано за 17 секунд)
   Post subject:
Reply with quote

у меня тоже заработало после удаления getmypid().
спасибо
Back to top
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 83
   поощрить/наказать


PostPosted: Fri Sep 18, 2009 1:02 pm (спустя 15 дней 19 часов 9 минут; написано за 1 минуту 27 секунд)
   Post subject:
Reply with quote

Я вот думаю, может стоит в сделать патч для JsHttpRequest без getmypid? Ибо смысла особого в ней нет, она используется для генерации уникального числа,
а за место нее можно что-нибудь другое придумать, раз уж она настолько часто отключена у хостеров.
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Fri Sep 18, 2009 3:04 pm (спустя 2 часа 2 минуты; написано за )
   Post subject:
Reply with quote

Не думаю, что так уж часто она отключена. Угрозы-то она все равно не представляет :).
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
Post a reply
Username
Subject
Господа спамеры и оптимизаторы!

Вы можете даже и не пытаться вставлять в текст поста ссылки - они все равно автоматически удаляются (вернее, тэги <a> заменяются на тэги <u>).

Но если не поверите и все же попытаетесь - как только увидите, что все безрезультатно, удалите свой пост, пожалуйста. Модераторы тоже люди, нехорошо, если они погрязнут в тоннах спама.
     

Disable BBCode in this post
Disable Smilies in this post
    HTML is OFF
BBCode is ON
Smilies are ON
You cannot post new topics in this forum. You can reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML